package com.papercutting.platform.service;

import com.papercutting.platform.dto.query.CultureQuery;
import com.papercutting.platform.dto.request.CultureRequest;
import com.papercutting.platform.dto.response.CultureResponse;
import com.papercutting.platform.dto.response.PageResult;

import java.util.List;
import java.util.Map;
import com.papercutting.platform.entity.Culture;

/**
 * 剪纸文化服务接口 - 重构为标准DTO模式
 */
public interface CultureService {
    
    /**
     * 创建文化内容
     */
    Long createCulture(CultureRequest request);
    
    /**
     * 更新文化内容
     */
    void updateCulture(CultureRequest request);
    
    /**
     * 删除文化内容
     */
    void deleteCulture(Long id);
    
    /**
     * 批量删除文化内容
     */
    void batchDeleteCultures(List<Long> ids);
    
    /**
     * 根据ID获取文化详情
     */
    CultureResponse getCultureById(Long id);
    
    /**
     * 分页查询文化列表
     */
    PageResult<CultureResponse> getCulturePage(CultureQuery query);
    
    /**
     * 获取文化列表（不分页）
     */
    List<CultureResponse> getCultureList(CultureQuery query);
    
    /**
     * 获取推荐文化列表
     */
    List<CultureResponse> getRecommendedCultures(Integer limit);
    
    /**
     * 获取置顶文化列表
     */
    List<CultureResponse> getTopCultures();
    
    /**
     * 增加浏览量
     */
    void increaseViewCount(Long id);
    
    /**
     * 点赞操作（切换模式）
     */
    Map<String, Object> likeCulture(String token, Long cultureId);
    
    /**
     * 取消点赞操作
     */
    Map<String, Object> unlikeCulture(String token, Long cultureId);
    
    /**
     * 收藏操作
     */
    Map<String, Object> favoriteCulture(String token, Long cultureId);
    
    /**
     * 搜索文化内容
     */
    PageResult<CultureResponse> searchCulture(String keyword, CultureQuery query);
    
    /**
     * 获取分类统计
     */
    List<Map<String, Object>> getCategoryStats();
    
    /**
     * 批量更新状态
     */
    void batchUpdateStatus(List<Long> ids, Integer status);
    
    /**
     * 获取所有文化内容
     */
    List<Culture> findAll();
    
    /**
     * 增加分享数
     */
    void increaseShareCount(Long id);
    
    /**
     * 获取相关文化内容
     */
    List<CultureResponse> getRelatedCultures(Long id, Integer category, Integer limit);
    
    /**
     * 检查用户交互状态
     */
    Map<String, Object> checkUserInteractionStatus(String token, Long cultureId);
    
    /**
     * 记录浏览
     */
    void recordView(Long id);
}